#include <stdio.h>

typedef unsigned long long tang_t;

tang_t factorial(int);

/**
 * 题目：求 1 + 2! + 3! + ... + 20! 的和。
 * 程序分析：此程序只是把累加变成了累乘。
*/
int main(int argc, char const *argv[])
{
    int i, j;
    tang_t sum = 0;

    for(i = 1; i <= 20; i++)
    {
        if(i==1) printf("%d", i);
        else printf("%d!", i);
        if(i<20) printf("+");
  
        sum += factorial(i);
    }
    printf(" = %llu\n", sum);

    return 0;
}

tang_t factorial(int n)
{
    unsigned long long result = 1;
    for(int j=1; j<=n; j++)
    {
        result *= j;
    }
    
    return result;
}